from estadoLB import EstadoLB, db_session
from sqlalchemy import exc
from flask import flash
session = db_session()

class EstadoLBManager(object):
    """Clase encargada del manejo de estados de lineas base"""
    def __init__(self):
        pass
    def __repr__(self):
        return '<EstadoLB Manager>'
    
    def guardarEstadoLB(self, estadoLB):
        """
        Metodo encargado de almacenar un estado de linea base en la base de datos
        @param estadoLB: Objeto linea base que se desea guardar.
        """
        session.add(estadoLB)
        try:
            session.commit()
        except exc.IntegrityError as ex:
            session.rollback()
            return flash("El estado ya existe", "error")
        else:
            return flash("Estado de linea base registrado exitosamente")
#        session.close()
        
    def eliminarEstadoLB(self, idestadolb):
        """
        Metodo encargado de eliminar un estado de linea base de la base de datos
        @param idestadolb: id de la linea base que se desea eliminar.
        """
#        session = db_session()
        estadoLB = session.query(EstadoLB).filter(EstadoLB.idestadolb == idestadolb).first()
        session.delete(estadoLB)
        session.commit()
        
    def getEstadoLB(self, idestadolb):
        """
        Metodo encargado de retornar estado de linea base dado su idestado
        @param idestadolb: id del estado linea base que se desea obtener.
        """
        estadoLB = session.query(EstadoLB).filter(EstadoLB.idestadolb == idestadolb).first()
        return estadoLB
    
    def getEstadoLBs(self):
        """Metodo encargado de retornar todos los estados de linea base"""
        estadoLBs = session.query(EstadoLB)
        return estadoLBs
    
    def getEstadoLBFiltradoPorNombre(self, nombre):
        """
        Metodo encargado de retornar un estado de linea base dado su nombre
        @param nombre: nombre del estado linea base que se desea obtener.
        """
        if nombre == "":
            nombre = "%"
        else:
            nombre = "%" + nombre + "%"
        estadoLB = session.query(EstadoLB).filter(EstadoLB.nombre.like(nombre))
        return estadoLB
    
    def getEstadoLBPorNombre(self, nombre):
        """
        Metodo encargado de retornar un estado de linea base dado su nombre
        @param nombre: nombre del estado linea base que se desea obtener.
        """
        estadoLB = session.query(EstadoLB).filter(EstadoLB.nombre == nombre).first()
        return estadoLB
    